package com.shrct.businessprocess.purchase;

import com.shrct.businessprocess.budget.RCBudget;
import com.shrct.businessprocess.budget.RCCost4ACTItem;
import com.shrct.businessprocess.project.RCExchangeRate;
import com.shrct.businessprocess.project.RCProjectMoney;
import com.shrct.businessprocess.project.RCRealMoney;
import com.shrct.businessprocess.purchase.RCPay;
import com.shrct.businessprocess.purchase.RCPayType;
import com.shrct.businessprocess.purchase.impl.RCPayRequestImpl;
import com.shrct.businessprocess.purchase.proxy.RCPayRequestProxy;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import edu.fudan.mylang.pf.INamedModelObject;
import java.util.Collection;
import java.util.Date;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = RCPayRequestImpl.class)
public interface RCPayRequest extends IModelObject, INamedModelObject {
  public abstract Collection<RCPay> getPurchasePays();
  
  public abstract RCPay createAndAddtoPurchasePays(final RCBudget budget);
  
  public abstract RCPay createAndAddtoPurchasePays(final RCBudget budget, final Procedure1<RCPay> updater);
  
  public abstract RCPayRequest removeFromPurchasePays(final RCPay rCPay);
  
  public abstract RCPayRequest removeAllPurchasePays();
  
  public abstract RCPayType getPayType();
  
  public abstract RCPayRequest setPayType(final RCPayType payType);
  
  public abstract Date getWishPayDate();
  
  public abstract RCPayRequest setWishPayDate(final Date wishPayDate);
  
  public abstract RCProjectMoney getAmount();
  
  public abstract RCPayRequest setAmount(final RCProjectMoney amount);
  
  public abstract String getComment();
  
  public abstract RCPayRequest setComment(final String comment);
  
  public abstract Boolean getIsFinished();
  
  public abstract RCPayRequest setIsFinished(final Boolean isFinished);
  
  public abstract Date getFinishDate();
  
  public abstract RCPayRequest setFinishDate(final Date finishDate);
  
  public abstract Date getTheStartDate();
  
  public abstract RCPayRequest setTheStartDate(final Date theStartDate);
  
  public abstract RCBudget getThebudget();
  
  public abstract RCPayRequest setThebudget(final RCBudget thebudget);
  
  public abstract Double getTaxRate();
  
  public abstract RCProjectMoney getTotalPaidProjectAmount();
  
  public abstract RCProjectMoney getRemainProjectAmount();
  
  public abstract RCRealMoney getTotalPaidAmount();
  
  public abstract RCExchangeRate getDefaultExchangeRate();
  
  public abstract RCBudget getBudget();
  
  public abstract String getEntityName();
  
  public abstract Iterable<RCCost4ACTItem> getCost4ACItems();
  
  public abstract RCPayRequestProxy toProxy();
}
